struts2学习记录其二:Action的配置和返回结果的配置

大家好,我们今天继续学习Struts2。如果对Struts2的创建有问题的朋友请看上一章。

上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html

下一章:异常处理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html 

一.配置Action

1.包和命名空间

<package....../>必须指定name(报名)属性,其他的可选属性:extends(继承),namespace(空间名,这个需要注意。),abstract(指定为抽象包)

(实际上所有的Struts2插件文件都会提供一个struts-plugin.xml)

默认的空间名(不使用namespace属性):可以处理任何空间里的Action请求,前提是他在自己的命名空间里没有该Action。

根命名空间(namespace="/"):指出里根下的Action请求,如请求/login.action。

2.Action的基本配置

至少指定一个name(通常是用字母和数字组成)属性作为请求的URL。但通常还需指定class属性作为Action的实现类,以及逻辑视图和物理视图的对应关系<result...../>。

(如果设置struts.enable.SlashesInActionNames常量为true,则可以使用其他字符来作为name)

3.使用Action的动态方法调用(尽量少使用)

action="actionName!methodName"

(注意:这个方法不需到xml文件中配置,只需要把struts.enable.DynamicMethodInvocation设置为true,它是直接调用对应Action的方法,而此方法必须和execute方法一样的格式)

4.指定method属性及使用通配符

在Action中加入method属性调用class处理类的方法

通配符写在name属性中,然后在class、method、<result..../>中使用{N}的形式来配备,可以指定method方法,如果不指定使用execute()方法(在这里name最好写成*.action)

特殊:不做任何处理的直接调转到其他界面(一般写在struts.xml的最后,实现简单的超链接。)

<action name="*">

<result>{1}.jsp</result>

</action>

6.配置默认Action

<defualt-action-ref name="....."/>:只是指定默认的处理Action,下面还是要配置其Action。

7.配置Action的默认处理类

<defualt-class-ref class="......."/>

二.配置处理结果

1.struts2提供两种结果:

局部结果:将<result.../>作为<action.../>的子元素

全局变量:将<result.../>作为<global-results..../>的子元素

(<result.../>常用属性name、type)

 <package name="loginpackage" namespace="/user" extends="struts-default">
        <action name="login" class="com.login.LoginAction1">
          <result name="success" type="dispatcher">//type还可以指定为location、parse,默认为disoatcher

      <param name="location">succees.jsp</param>

    //这里的name可以指定两个值:location指定该逻辑视图对应的实际的视图资源,parse可以使用OGNL表达式来作为实际视图名字,两个属性都可不要,默认success                    

    </result>         
        </action>
    </package>

2.struts2支持的结果类型

这里我们先只介绍三个类型,其他的在后面的会详细介绍的

1.plainText(不常用):只要用来显示实际资源的代码。

参数:location:指定实际的视图资源。charSet:指定输出界面时的所用到的字符集。一般放在<param.../>中。

2.redirect:将请求重定向到指定的视图资源。(dispatcher是将请求转发给视图资源)

注意:重定向会丢失所有的请求参数、请求属性、Action的处理结果。不能重定向到WEB-INF路径下,因为该路径是被保护的。

参数:location:跳转地址,parse:是否允许使用表达式

3.redirectAction:功能与redirect一样,重定向。但这个可以使用ActionMapper

参数:actionName:重定向的Action名,namespace:重定向的Action所占的空间(针对与Action,二redirect针对于具体的资源请求)

 

3.动态结果:OGNL表达式与通配符连用(借鉴前面的特殊Action)

4.Action属性值决定物理视图(这个我也不太懂,有大牛懂得给我说一下)

${属性名.属性名........}

5.全局结果(<global-results...../>)

其使用方式和<action.../>几乎一样,这个是覆盖全部的Action,但会被局部的Action所覆盖。

6.使用PreResultListener

PreResultListener拦截器是在action方法执行后,返回result(即回调before()方法)之前执行的拦截器。要通过ActionInvocation的addPreResultListener()方法完成。

它可以将Action转入不同的Result,所以它可以作为日志实现方式。

ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
 invocation.addPreResultListener(new PreResultListener()
  {
            public void beforeResult(ActionInvocation invacation, String resultCode)
             {
                            //方法体内写我们需要处理的监听器业务逻辑
                            //上面的形参 resultCode 是前台发送的请求(即 Action 的逻辑名)
                }
 });

 

对上面的某些内容的具体代码:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

 <constant name="struts.enable.DynamicMethodInvocation" value="false" />  

 <constant name="struts.devMode" value="true" />  

<constant name="struts.custom.il8n.resources" value="mess"/>  

<constant name="struts.enale.DynamicMethodInvocation" value="false"/>   

 <package name="loginpackage" namespace="/user" extends="struts-default">       

 <action name="login" class="com.login.LoginAction">        

      <result name="error">/error.jsp</result>    

    <result name="success">/success.jsp</result>                   

 </action>    

</package>

 <package name="registpackage" namespace="/" extends="struts-default">   

    <action name="MyAction" class="com.login.MyAction">      

      <result>${target}.jsp</result>       

     </action>        

   <action name="*" class="com.login.RegistAction" method="{1}">          

  <result name="error">/error.jsp</result>    

  <result name="success">/success.jsp</result>           

  </action>    

</package>

<package name="Allpackage" extends="struts-default">   

  <action name="*">

  <result>{1}.jsp</result>

</action>

</package>

</struts>

------------------------------------------------------------------------------------------------------------------------------------

内容不是特别详细,见谅。这只是我的一些见解。有什么错误的请指出,谢谢。

上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html

下一章:异常处理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html 

 

posted @ 2016-11-06 23:17  freeflying  阅读(2014)  评论(0编辑  收藏  举报